Cairo surfaces are in BGRA format, but we upload them as RGBA buffers on
GLES; this means that the R and B channels are flipped in the texture
data.
Instead of doing a costly channel flip before putting them on the GPU,
we can flip the values inside the GLSL shader we use specifically for
GLES.
varying highp vec2 vUv;
void main() {
- gl_FragColor = texture2D(map, vUv);
+ vec4 color = texture2D(map, vUv);
+
+ /* Flip R and B around to match the Cairo convention */
+ gl_FragColor = vec4(color.z, color.y, color.x, color.w);
}